package com.cyh;

import java.util.concurrent.atomic.AtomicInteger;

public class AccountCas {
    private AtomicInteger balance;

    public AccountCas(AtomicInteger balance) {
        this.balance = balance;
    }

    //查询余额
    public Integer getBalance() {
        return balance.get();
    }

    //取款
    public void withdraw(Integer amount) {
        while (true) {
            //获取余额的最新值
            int prev = balance.get();
            //要修改后的余额
            int next = prev - amount;
            if(balance.compareAndSet(prev, next)) {
                //余额修改成功就退出循环，否则一直尝试修改； 因为修改有可能失败，所有要循环操作
                //因为这个线程在改之前，已经有线程改了值，那么这次修改就会失败，继续循环。
                break;
            }
        }
    }
}
